package com.sprucetec.live.service;

import com.sprucetec.live.common.dto.business.NettyMessageDto;
import com.sprucetec.live.common.util.ServiceResult;
import com.sprucetec.live.entity.LiveChat;
import com.sprucetec.live.common.dto.PagedListDTO;
import com.sprucetec.live.common.dto.business.LiveChatDto;

import java.util.List;
import java.util.Map;

/**
 * @author chenkai
 * @date 2020/4/2 4:37 下午
 * @description:
 */
public interface LiveChatService {

    PagedListDTO<LiveChatDto> getLiveChatPage(LiveChatDto liveChatDto);

    ServiceResult<Integer> addChat(LiveChatDto liveChat) throws Exception;

    /**
     * 查询用户剩余提问次数
     *
     * @param liveChat
     * @return
     */
    int getRemainsCount(LiveChat liveChat);

    /**
     * 通过mq查插入聊天信息
     *
     * @param liveChatDto
     * @return
     */
    int insertChatByMq(LiveChatDto liveChatDto);


    /**
     * 批量插入聊天信息
     */
    void batchInsertChatByMq(List<LiveChatDto> liveChatDtos);


    /**
     * 查询所有聊天信息
     *
     * @param liveChatDto
     * @return
     */
    List<LiveChat> getChatList(LiveChatDto liveChatDto) throws InterruptedException;

    /**
     * 删除聊天
     *
     * @param liveChatDto
     * @return
     */
    Integer deleteChat(LiveChatDto liveChatDto);

    /**
     * 通过mq将消息转发到nettyServer 广播模式，解决websocket无法集群的方案
     * todo  目前不先不使用了
     *
     * @param nettyMessageDto
     * @return
     */
    Integer socketSendByMq(NettyMessageDto nettyMessageDto);


    /**
     * 获取Person界面的聊天 提问数据
     *
     * @param liveChatDto
     * @return
     */
    Map<String, List<LiveChat>> getChatListOnPerson(LiveChatDto liveChatDto);

    /**
     * 导出聊天信息
     *
     * @param liveChatDto
     * @return
     */
    List<LiveChatDto> exportChatData(LiveChatDto liveChatDto);

    void chatToMCQ(LiveChatDto liveChatDto);
}

